Real-Time Transport Protocol (RTP) is often used for real time communications including voice traffic. RTP is normally communicated using User Datagram Protocol (UDP) which is a best effort type of protocol which does not involve packet retransmission in the case of a lost or missing packet.
Transmission Control Protocol (TCP) in contrast to UDP includes retransmission mechanisms where a lost or missing packet may be requested and other TCP packets held until the missing packet is received. This can lead to what is sometimes referred to as Head Of Line Blocking (HOLB) where a single missing TCP packet may delay the delivery of subsequently received TCP packets.
HOLB can degrade real time communications where it may result in voice or other information being delayed potential past a point in time where it may be used. While a small number of packets may end up being retransmitted in TCP due to the loss of a packet, the effect of HOLB can affect a much larger number of packets since multiple packets may be delayed while a missing packet is retransmitted. Thus, while TCP provides for ordered delivery of packets, it suffers from head of line blocking (HOLB). If segment x is not delivered, any subsequent segment is normally not sent to the application until segment x is received and delivered.
While the HOLB problem makes TCP less desirable than other protocols for RTP packet communications, in some situations such as at hotels or other public places, UDP and other types of non-TCP packets are blocked for security and/or other reasons by firewalls or NAT (Network Address Translation) devices. For this reason, TCP is now being used in some cases to communicate RTP packets.
RTP over TCP is sometimes used to traverse firewalls, which do not allow UDP traffic or require presence of Hypertext Transfer Protocol (HTTP) proxy. This is commonly the case at hotels and other locations where UDP traffic may be blocked.
RTP over TCP packets are carried based on RFC4571. The RFC4571 specification provides a 16-bit length field at the front of the RTP packet. The length field can be used to identify packet boundaries in an RTP stream when it is present.
When UDP is used to communicate RTP packets, RTP packets are normally not split across UDP packet boundaries. However, in the case of TCP which is deemed more reliably than UDP since it has a packet retransmission mechanism, RTP packets may be split across multiple TCP packets. Thus, loss of a TCP packet may result in loss or unavailability of the length field of an RTP packet making it difficult to identify complete RTP packets in the case of one or more missing TCP packets.
RTP is used to carry real time communication data. Delay of such information is not desired due to its real time nature. This is in conflict with HOLB. What makes HOLB especially bad for RTP applications is that it may prevent even packets, which arrived in a timely manner, to be delivered to the application.
In view of the above discussion it should be appreciated that there is a need for methods and apparatus which allow TCP to communicate RTP packets while avoiding the problems associated with head of line blocking which normally occur when TCP is used for communications purposes.